<?php

namespace app;

// 应用请求对象类
class Request extends \think\Request
{
    //全局过滤属性；
    //也可以 Request::filter(['strip_tags', 'htmlspecialchars']);
    protected $filter = ['htmlspecialchars'];

    /**
     * 获取请求的数据
     * 获取额外参数和值；
     * 　　type为 1、2 表示 索引数组（1为 Value 的一维数组，2为key、Value的二维数组），0表示 关联数组
     *     每条数据组成：
     *       数组/字符串
     *     如果是数组：
     *       $param[0]：要获取的Key
     *         可以为数组：0为key，1为变量修饰符
     *         $param[1]：默认值；!!!注意，如果默认值为数组，则这个项的值也会转为数组（索引）!!!
     *         $param[2]：过滤函数
     *         $param[3]：替换的新key
     *     已修改为：如果没有 $param 且没有缺省值，则跳过这个；
     *     感觉还可以修改 变量修饰符 那部分（去掉 增加变量修饰）
     *     返回：
     *       索引：二维数组：[[key, 值], [key, 值]。。。]，适用于where
     *        一维数组[值, 值, 。。。]
     *       关联：一维关联数组
     *
     * @param array $params
     * @param int   $type
     *
     * @return array
     */
    public function getParams(array $params, int $type = 0): array
    {
        $p = [];
        $i = 0;
        foreach ($params as $param) {
            if (!is_array($param))    //如果不是数组
            {
                //原来的索引数组没有key
                //$p[$suffix == true ? $i++ : $param] = $this->param($param);
                if ($type == 0)
                    $p[$param] = $this->param($param);
                else if ($type == 1)
                    $p[$i++] = $this->param($param);
                else {
                    //修改为 [key, 值]
                    $p[$i++] = [$param, $this->param($param)];
                }
            } else {
                //if (!isset($param[1])) $param[1] = null;
                if (!isset($param[2])) $param[2] = '';
                if (is_array($param[0]))    //如果是数组
                {
                    if (!array_key_exists('1', $param))    //如果没有默认值
                    {
                        if (!$this->has($param[0][0]))    //如果request中没有
                            continue;

                        $param[1] = null;
                    }

                    //如果默认值为数组，则给param加上变量修饰符（/a）；否则手动连接修饰符
                    $name    = is_array($param[1]) ? $param[0][0] . '/a' : $param[0][0] . '/' . $param[0][1];
                    $keyName = $param[0][0];
                } else {
                    if (!array_key_exists('1', $param))    //如果没有默认值
                    {
                        if (!$this->has($param[0]))    //如果request中没有
                            continue;

                        $param[1] = null;
                    }

                    //如果默认值为数组，则给param加上变量修饰符（/a）
                    $name    = is_array($param[1]) ? $param[0] . '/a' : $param[0];
                    $keyName = $param[0];
                }

                //原来的索引数组没有key
                //$p[$suffix == true ? $i++ : (isset($param[3]) ? $param[3] : $keyName)] = $this->param($name, $param[1], $param[2]);
                if ($type == 0)
                    $p[(isset($param[3]) ? $param[3] : $keyName)] = $this->param($name, $param[1], $param[2]);
                else if ($type == 1)
                    $p[$i++] = $this->param($name, $param[1], $param[2]);
                else {
                    //修改为 [key, 值]
                    $p[$i++] = [isset($param[3]) ? $param[3] : $keyName, $this->param($name, $param[1], $param[2])];
                }
            }
        }
        return $p;
    }












}
